home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 2.iso
/
STUTTGART
/
HARDWARE
/
IICALARM
/
!iicAlarm
/
!Hilfe
< prev
next >
Wrap
Text File
|
1994-05-22
|
10KB
|
213 lines
-- !Help -- !iicAlarm 1.00
von Andreas Barth, May 1994
Eine Hardware-Erweiterung um den Computer automatisch ein/auszuschalten.
!iicAlarm benutzt die Alarm-Funktionen des Archimedes-Uhrenbaustein PCF8583,
die zur Zeit unbenutzt sind.
Man kann eine Alarm-Zeit setzen, zu der dann eine Leitung geschaltet wird.
Mit einer kleinen Schaltung kann man dann den Computer einschalten.
Unter dem Desktop werden die gewünschten Programme durch die !Alarm-Applikation
aufgerufen, und am Ende eines automatischen Ablaufes wird die nächste Alarm-
Zeit gesetzt und der Rechner durch eine IO-Leitung ausgeschaltet.
Benötigt RiscOS 3.
Einleitung
----------
Der Uhrenbaustein im Archimedes, ein PCF8583, hat 240 Bytes CMOS Ram,
8 Bytes Uhreninformationen und 8 Bytes Alarmregister, die zur Zeit unbenutzt
sind und auch als Ram benutzt werden könnten.
RiscOS benutzt die 8 Bytes Alarmregister zur Zeit nicht.
Der Baustein besitzt einen Alarm-Ausgang, der durch das Alarm-System gesetzt
werden kann und zu einer vorgegebenen Zeit etwas schalten kann. Benutzt man
eine einfache FlipFlop-Schaltung, deren Eingänge um mehrere Sekunden verzögert
werden und dessen Ausgang ein (elektronisches Last-)Relais ansteuern kann,
so kann man den Computer damit schalten.
Man benötigt dann noch etwas Software, die den Alarm-Status ermittelt oder
die Alarm-Zeit setzt.
Um es möglichst einfach zu machen, benutze ich die !Alarm-Applikation um die
Zeit-Daten zu verwalten. Unter RiscOS 3 kann !Alarm Task-Alarme auslösen, die
ein Programm, *Command oder Batchfile starten können.
So muß die iicAlarm-Software nur noch die Alarm-Datenbank nach der nächsten
Task-Alarm-Zeit durchsuchen um sie im Uhrenbaustein zu setzen.
Die Verwaltung obliegt somit völlig der !Alarm-Applikation.
Software
--------
!iicAlarm greift an den wesentlichen Teilen des Rechnersystems
in die Kontrollen ein und muß beim einschalten/booten und ausschalten/
resetten berücksichtigt werden.
Fünf kleine Programme erleichtern einem die Arbeit.
Während des Rechnerlaufes sollte nun folgendes passieren:
<Der Rechner geht an und bootet von Diskette oder Festplatte>
- Beim normalen BOOT-Vorgang wird die Umgebungsvariable <Alarmfile> gesetzt.
(z.B. *Set Alarmfile System:Alarms)
Sie zeigt auf DIE gültige !Alarm-Datei, die auch bei normaler Benutzung
des Desktops immer geladen werden soll. !iicAlarm greift auf diese Datei zu
um die Zeit herauszufinden an dem der Rechner automatisch eingeschaltet
werden soll.
- !iicAlarm -- Muß beim Bootvorgang aufgerufen werden.
Es stellt fest, auf welche Art und Weise der Rechner eingeschaltet wurde
und ob das Alarmsystem bereits aktiviert war.
Daraufhin werden einige Umgebungsvariablen gesetzt.
Liest sich die Alarmdatei durch und sucht die aktuelle und die nächste
Task-Alarm-Zeit. (Bug: Wenn der aktuelle Alarm-Rekord durch ein Repeat
auch zum nächsten wird, haben wir einen Fehler. Das kann die Routine
nämlich noch nicht.)
Das keyScan-Modul wird geladen.
- Im Desktop muß !Alarm gestartet werden mit <Alarmfile> als Argument,
damit es direkt mit dem richtigen Alarmfile anfängt.
!Alarm startet auch die gewünschten Programme und verwaltet die Zeiten wie
gewohnt. Solange der Rechner an ist, werden alle Task-Alarms wie gewohnt
gestartet und verwaltet.
- !AlarmOff -- *AlarmOff
Kann jederzeit aufgerufen werden, um die Alarmfunktionen auszuschalten,
und ein weiteres automatisches einschalten des Rechners zu unterbinden.
Der Alarmzustand der Uhr wird deaktiviert und verriegelt.
- !AlarmOn -- *AlarmOn
Kann jederzeit aufgerufen werden, um die Alarmfunktionen zu aktivieren.
Es wird lediglich der Modus gesetzt und die Uhr auf einen Defaultzustand
gebracht.
!AlarmOff und AlarmSet werden aufgerufen.
- !AlarmQuit -- *AlarmQuit
Kann bei automatischen Programmabläufen am Ende aufgerufen werden, um den
Computer wieder abzuschalten. Macht quasi nichts, wenn der User eingeschaltet
hat oder neu initialisiert wurde. Schaltet aber einfach aus, wenn der
Rechner automatisch läuft.
- !AlarmShut -- *AlarmShut, *Bye
Shutdown-Programm. Muß am Ende der Arbeit vom User benutzt werden, um die
nächste Alarmzeit in der Uhr zu setzen. Schaltet außerdem den Rechner aus.
Entspricht der Shutdown-Funktion des Taskmanagers (Shift-Control-F12).
Einfache Abläufe können nun mit Batchfiles erzeugt werden, die zu der
vorgesehenen Zeit durch !Alarm als Task-Alarm gestartet werden können.
Beim Ausschalten des Rechners sucht die SetAlarm-Routine die nächste
Task-Alarm-Zeit und setzt sie in der Uhr.
Die Programme sind auch als CLI-Befehle erreichbar (ohne '!').
So kann der automatische Ablauf einfach mit '*AlarmQuit' beendet werden.
- Das keyScan-Modul schaltet sich in den InsV-Vektor und fängt die Taste
<ShiftControlF12> ab. Unter dem Wimp installiert es einen kleinen Modul-Task
der bei gedrückter Taste einen Taskcommand absetzt:
einfacher Tastendruck: "*Filer_OpenDir ...Tools"
zweifacher Tastendruck: "*AlarmShut"
Man sollte also die Shutdown-Funktion im TaskManager-Menü nicht mehr
benutzen.
Hardware
--------
Achtung !
- Diese Version mit Schaltung ist nur für A3xx/A4xx/A3000 geeignet und belegt
den normalerweise ungenutzten Auxiliary-IO Port: Alarm und Aux1/2.
- A3000 haben keinen AuxIOport. Man muß ihn selbst zusammenstellen:
Benötigt werden: Alarm: IC6, pin 7 -> pin 5 unseres AuxIO-Anschlusses.
Aux 1: IC18 pin 17 -> pin 3 unseres AuxIO-Anschlusses.
Aux 2: IC18 pin 18 -> pin 2 unseres AuxIO-Anschlusses.
- Nicht geeignet für neuere Rechner mit IOEB usw. (A3010,3020,4000,5000), da
diese nicht über den Auxiliary-IOPort verfügen und diese Leitungen anders
benutzten !!
- Rechner mit VIDC-Enhancer benutzen manchmal Aux1 zum umschalten der
Quarzfrequenzen. Auch das ist nicht sehr geeignet. Also herausfinden
welche Leitung benutzt wird und für uns die andere benutzen.
In den Programmen 'SwitchOff' und '!AlarmShut' werden die Auxleitungen
gesetzt, Bit 0 und Bit 1 können für Aux1/2 respektive geändert werden,
direkt vor dem CALL-Aufruf.
Funktion
Der Uhrenbaustein im Archimedes ist ein PCF8583, eine Uhr mit Kalender, Alarm
und Ram. Der Alarm kann eine Leitung am IC auf Masse schalten (open collector).
Er kann durch diverse Möglichkeiten aktiviert werden: Tagesalarm, Datumsalarm,
Timeralarm. Wir benutzen aber nur den Datumsalarm.
Im Defaultzustand der Uhr, zB. nach einem Reset durch Batteriewechsel, gibt
die Alarm-Leitung ein Sekunden-Signal aus. Das ist sehr ärgerlich, denn unsere
Schaltung muß schon sehr sicher verhindern können, daß der Rechner im
Sekundentakt ein- und ausgeschaltet wird. Sie soll sehr wenig Energie
verbrauchen, denn sie wird mit einer Batterie betrieben. Sie soll unaufwendig
sein.
Siehe Schaltung in Abbildung Circuit.
Siehe Bestückungsplan in Abblidung PCB.
Es handelt sich um ein einfaches Flipflop, welches durch ALARM gesetzt und
durch AUX1 oder 2 zurückgesetzt wird. Das erste Gatter vom Eingang aus liefert
dabei lediglich einen bekannten Strom/Spannungspegel der dann in die
Verzögerungsglieder gehen. So muß ein Eingangssignal mindestens 5 Sekunden
lang aktiv und stabil bleiben bevor SET/RESET ausgelöst werden.
Da die Schaltung sehr hochohmig ist, einige Leitungen aber im hochspannugs-
bereich herumliegen können, kann es sein, daß elektromagnetische Einstreuungen
die Funktion stören. Ist mir aber noch nicht passiert.
Einbau der Schaltung
Die fertig bestückte Platine besitzt 5 Anschlüsse:
1) Auxiliary-I/O-Connector
5polig, wird mit PL10 (beim A3xx/4xx) im Rechner verbunden. Pin 1 ist
jeweils gekennzeichnet. Liefert die Steuersignale von der Uhr und vom
Benutzer. Die Signale ab Pin 1 sind: Masse, Aux2, Aux1, C4, Alarm.
2) und 3) Power bzw. Batterie-Anschlüsse
jeweils 2polig. Wird einmal mit dem Rechnernetz verbunden und dazu mit
dem eingebauten Batteriepack. Kann sehr gut an den kleinen Floppy-Anschluß
angeschlossen werden. Der markierte Leiter dort ist +5V, dann 2 mal Masse
und 12V.
4) Switch
2polig. Liefert eine mit 47Ohm gesicherte Versorgungsspannung für ein Relais.
Die Masse wird geschaltet durch einen BS108, einen VMOSFET. Der verträgt
200V und treibt max. 260mA. Leider würde das unsere Batterie nicht gerne
haben. Ich empfehle ein ELR (elektronisches Lastrelais), da man diese Dinger
auf Elektronikmärkten billig bekommt ( < 7DM) und sie sich mit 3V, 1.2mA
ansteuern lassen, dank ihres Optokopplers. Vorsicht allerdings bei
induktiven Lasten ! Man kann damit keine Energiesparlampe anwerfen...
Polarität am Switch-Anschluß beachten.
5) Ein/Ausschalter
Im Schaltplan, Version 1.00, ist ein zweiter Eingang verzeichnet und auf der
Platine auch eingebaut. Der eignet sich aber nicht als Einschalter für den
Benutzer, es sei denn, man hat die Nerven jedesmal 5 Sekunden zu warten, bis
sich was tut. Im Schaltplan ist eine Änderung verzeichnet die man tunlichst
einbauen sollte. Man kann mit dem neuen Anschluß zwei Taster bedienen, einen
zum einschalten, einen zum ausschalten. Montiert man zB. einen Kipptaster
an die Vorderfront des Gerätes, so kann man endlich mal bequem ein- und
ausschalten.
Der Aus-Taster FUNKTIONIERT NICHT, wenn die Alarm-Leitung von der Uhr
gesetzt/aktiv ist. D.h. es ist ein Alarm eingetreten und der Rechner möchte
sich nun eingeschaltet wissen und sein Programm starten.
Man benötigt in diesem Fall wenigstens ein Programm, das die Alarm-Leitung
deaktiviert. Jedes !iicAlarm-Tool kann dies machen.
Nichtsdestotrotz braucht man ein Programm, um die Leitung zu deaktivieren.
Wenn man gerade keines zur Hand hat, muß man leider den Stecker ziehen oder
die Mehrfachdose am Schalter ausschalten. Die nächste Platinenversion
ist da bestimmt intelligenter.
Zum Schluß
----------
Die Rechte von !iicAlarm verbleiben bei mir. Die Applikation darf beliebig
kopiert und weitergegeben werden für nichtkommerzielle Anwendungen und nur
solange alles and alles unverändert kopiert wird.
Ich übernehme keine Garantien oder Verantwortungen für was auch immer.
Für Kommentare bin ich immer offen:
Andreas Barth
Karl-Eberhardstr. 9
W-51643 Gummersbach
Germany
Tel. 02261/27042
EMail: Andreas_Barth@ruba.rz.ruhr-uni-bochum.de (etwa bis Sept. 1994)
ToDo
-----
Well, it works, eh ?
- Pack everything in a small module.
- build a better circuit.